package com.aki.ai_property.service.impl;

import com.aki.ai_property.dao.SubscriptionDao;
import com.aki.ai_property.dto.SubscriptionExportDto;
import com.aki.ai_property.dto.SubscriptionSexDto;
import com.aki.ai_property.dto.SubscriptionSexTjDto;
import com.aki.ai_property.entity.Subscription;
import com.aki.ai_property.service.intf.SubscriptionService;
import com.aki.ai_property.util.StringUtil;
import com.aki.ai_property.vo.PageBean;
import com.aki.ai_property.vo.Result;
import com.alibaba.druid.support.json.JSONUtils;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 　　　　　　　　　,-､　　 　　　　　　　 ,.-､
 * 　　　　　　　 ./:::::＼　　　　　　　 ／::::ヽ
 * 　　　　　　　/::::::::::::;ゝ–——– ､:::::::::|
 * 　　　　　　 /,.-‐”"´ 　　　　　　 ＼ ::::::::|
 * 　　　　　／　 　　　　　　　　　 　 ヽ､::::|
 * 　　　　/　　　　●　　　 　 　 　 　　 　 　ヽ|
 * 　　 　 l　 　, , ,　　 　 　 　 　 　 ●　　　 l
 * 　　　 .|　　　 　　　　(_人__丿 　 　　､､､　 　|
 * 　 　 　l　　　　　　　　　　 　　　　　　 　　l
 * 　　　　` ､　　　　　　　　 　 　 　 　 　 　 /
 * 　　　　　　`ｰ ､__　　　 　 　 　　　　　　 ／
 * 　　　　　　　　　/`”’ｰ‐‐——‐‐‐┬”’"
 *
 * @author zhu
 * @DATE 2022/8/27
 */
@Service
public class SubscriptionServiceImpl implements SubscriptionService {
    @Autowired
    private SubscriptionDao dao;

    @Override
    public Result save(Subscription subscription) {
        if (dao.save(subscription)>0){
            return Result.ok();
        }else {
            return Result.fail();
        }
    }

    @Override
    public Result update(Subscription subscription) {
       if (dao.update(subscription)>0){
           return Result.ok();
       }else {
           return Result.fail();
       }
    }

    @Override
    public Result delete(int id) {
        if (dao.delete(id)>0){
            return Result.ok();
        }else {
            return Result.fail();
        }
    }

    @Override
    public PageBean selectPage(String subname, int page, int limit) {
        if (StringUtil.isNotEmpty(subname)){
            subname = "%"+subname+"%";
        }
        int start = (page - 1) * limit;
        return PageBean.ok(dao.selectCount(subname), dao.selectPage(subname, start, limit));
    }

    @Override
    public Result delIds(int[] ids) {
        if (dao.delByIds(ids)>0){
            return Result.ok();
        }else {
            return Result.fail();
        }
    }

    /**文件导出*/
    @Override
    public List<SubscriptionExportDto> all() {
        return dao.all();
    }

    @Override
    public Result upload(MultipartFile file) throws IOException {
        //1.接收文件， 获取文件内容
        //1.验证上传文件是否存在
        if(!file.isEmpty()){
            //2.解析Excel -EasyExcel
            //2.解析Excel数据
            List<Subscription> list= EasyExcel.read(file.getInputStream(), Subscription.class, new ReadListener() {
                @Override
                public void invoke(Object o, AnalysisContext analysisContext) {}
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
            }).sheet().doReadSync();
            //3.Mybatis 实现批量新增
            if(dao.saveBatch(list)>0){
                //4.返回
                return Result.ok();
            }
        }
        return Result.fail();
    }

    @Override
    public Result sextj() {
        //1.查询数据
        List<SubscriptionSexDto> list=dao.selectSex();
        //2.组装结果数据
        List<SubscriptionSexTjDto> result=new ArrayList<>();
        //2.组装数据  JDk8新特性
        list.forEach(s->{
            result.add(new SubscriptionSexTjDto(s.getSex(),s.getNum()));
        });
        //3.返回数据
        return Result.ok(result);
    }



}
